#ifndef FILE_COUNTER_HPP
#define FILE_COUNTER_HPP

#ifdef _WIN32
#include <windows.h>
#else
#include <dirent.h>
#include <sys/types.h>
#endif

#include <iostream>
#include <string>

int count_files(const char* dir_path) {
    int file_count = 0;

#ifdef _WIN32
    // Windows平台，使用FindFirstFile和FindNextFile
    WIN32_FIND_DATA findFileData;
    HANDLE hFind = FindFirstFile((std::string(dir_path) + "\\*").c_str(), &findFileData);
    if (hFind == INVALID_HANDLE_VALUE) {
        std::cerr << "无法打开目录或目录不存在。" << std::endl;
        return -1;
    }

    do {
        if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
            if (strcmp(findFileData.cFileName, ".") != 0 && strcmp(findFileData.cFileName, "..") != 0) {
                continue;
            }
        } else {
            file_count++;
        }
    } while (FindNextFile(hFind, &findFileData) != 0);

    FindClose(hFind);

#else
    // Linux/Unix平台，使用opendir和readdir
    DIR* dir = opendir(dir_path);
    if (dir == nullptr) {
        std::cerr << "无法打开目录或目录不存在。" << std::endl;
        return -1;
    }

    struct dirent* entry;
    while ((entry = readdir(dir)) != nullptr) {
        if (entry->d_type == DT_REG) {  // 只统计常规文件
            file_count++;
        }
    }

    closedir(dir);
#endif

    return file_count;
}

#endif // FILE_COUNTER_HPP
